package com.AdvancedDemos.Learn网络编程.CS架构.useTCP6图片上传;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.UUID;

/**
 * 服务器端专门处理接收图片并返回ok
 */
public class ServerSocketThread extends Thread {

    private Socket socket;

    public ServerSocketThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        System.out.println("【服务器端】接收数据！");

        try {
            //创建一个随机文件名
            String fileName = UUID.randomUUID().toString();

            //接收数据,将接收的图片写入到服务器本地d:/Temp/随机名称.jpg
            InputStream inputStream = socket.getInputStream();
            FileOutputStream fos = new FileOutputStream("F:\\360极速浏览器X下载\\" + fileName + ".jpg");

            int len;
            byte[] bytes = new byte[1024 * 5];
            //读进来
            while ((len = inputStream.read(bytes)) != -1) {//此处的循环结束条件!=-1其实并没有用,因为不是读取文件,len永远不会等于-1,真正让循环停止的是Client中的socket.shutdownOutput();告知服务器发送完毕,停止接收
                //写出去
                fos.write(bytes, 0, len);//直接将读到的字节数组写出到指定文件
            }

            //关闭文件流
            fos.close();

            System.out.println("【服务器端】发数据");
            //发送数据
            String data = "ok";
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write(data.getBytes());

            System.out.println("【服务器端】关闭资源");
            //关闭资源
            socket.close();
        } catch (Exception e) {
            System.out.println("这次图片传输出现了异常....");
        }

    }
}
